package controllers;

import static controllers.Util.data;
import static java.lang.String.format;

import java.util.ArrayList;
import java.util.List;

import models.Curso;
import models.Professor;
import play.db.jpa.GenericModel;
import play.mvc.Before;
import play.mvc.Controller;

public class Professores extends Controller {

	@Before
	static void checkUser() {
		if (!Application.connected().isDefined()) {
			flash.error("É necessário autenticar-se");
			Application.index();
		}
	}

	public static void formCadastroProfessor() {
		final List<Curso> cursos = Curso.find(
				"select c from Curso c where c.ativo=true").fetch();
		render(cursos);
	}

	public static void cadastrarProfessor(Professor professor, String dd,
			String mm, String yyyy, List<String> lista) {
		professor.cursos = new ArrayList();
		if (lista != null) {
			for (String c : lista) {
				final long id = Long.valueOf(c);
				final Curso curso = Curso.findById(id);
				professor.cursos.add(curso);
			}
		}
		professor.pessoa.dataNascimento = data(dd, mm, yyyy);
		professor.ativo = true;
		professor.pessoa.save();
		professor.save();
		flash.success(format("O Professor, %s foi cadastrado com sucesso!",
				professor.pessoa.nome));
		formCadastroProfessor();
	}

	public static void buscarProfessores(String parametro, String campo) {
		final List<Professor> professores;
		if ("nome".equalsIgnoreCase(parametro)) {
			professores = Professor.find(
					"select p from Professor p where p.pessoa.nome like '"
							+ campo + "%' order by p.pessoa.nome").fetch();
		} else if ("cpf".equalsIgnoreCase(parametro)) {
			professores = Professor
					.find("select p from Professor p where p.pessoa.cpfTitular= ? order by p.pessoa.nome",
							campo).fetch();
		} else {
			professores = Professor.findAll();
		}
		render(professores);
	}

	public static void formAtualizarProfessor(Long idProfessor, Long idPessoa) {

		final Professor professor = Professor.findById(idProfessor);
		@SuppressWarnings("deprecation")
		final int dia = professor.pessoa.dataNascimento.getDate();
		@SuppressWarnings("deprecation")
		final int mes = professor.pessoa.dataNascimento.getMonth();
		@SuppressWarnings("deprecation")
		final int ano = professor.pessoa.dataNascimento.getYear() + 1900;

		final List<Curso> cursos = Professor.find(
				"select c from Curso c where c.ativo=true").fetch();
		render(professor, idProfessor, idPessoa, dia, mes, ano, cursos);
	}

	public static void atualizarProfessor(Professor professor, String dd,
			String mm, String yyyy) {

		professor.pessoa.dataNascimento = data(dd, mm, yyyy);
		professor.pessoa.save();
		professor.save();
		flash.success("O Professor, %s foi atualizado com sucesso!",
				professor.pessoa.nome);
		buscarProfessores();
	}

	private static void buscarProfessores() {
		buscarProfessores(null, null);
	}

	public static void ativar(Long id) {
		final Professor professor = Professor.findById(id);
		professor.ativo = !professor.ativo;
		professor.save();
		buscarProfessores();
	}
}